package com.unitd.comm.entity;

import com.alibaba.fastjson.annotation.JSONField;
import com.unitd.frame.comm.utils.IdGenUtils;
import com.unitd.frame.mybatis.core.entity.BaseEntity;
import org.hibernate.validator.constraints.Length;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.util.Date;

/**
* @desc 系统参数表数据Entity基类
* @filename SysEntity.java
* @copyright www.unitd.com
* @author Hudan
* @version 1.0
* @date 2017-04-08
*/
public abstract class SysEntity extends BaseEntity {

	/** 主键 */
	/* 该字段@GeneratedValue配置只允许以下几种形式:1.全部数据库通用的@GeneratedValue(generator="UUID") 2.useGeneratedKeys的@GeneratedValue(generator=\"JDBC\") 3.类似mysql数据库的@GeneratedValue(strategy=GenerationType.IDENTITY[,generator="Mysql"])*/
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "select replace(uuid(), '-', '')")
	protected String id;
	/** 创建者 */
	@Column(name = "create_by")
	protected String createBy;
	/** 创建时间 */
	@Column(name = "create_date")
	protected Date createDate;
	/** 更新者 */
	@Column(name = "update_by")
	protected String updateBy;
	/** 更新时间 */
	@Column(name = "update_date")
	protected Date updateDate;
	/** 备注信息 */
	@Column(name = "remarks")
	protected String remarks;
	/** 删除标记(0:正常;1:删除;2:审核) */
	@Column(name = "del_flag")
	protected String delFlag;

	public SysEntity() {
		super();
		this.delFlag = DEL_FLAG_NORMAL;
	}
	public SysEntity(String id) {
		this();
		this.id = id;
	}

	/**
	 * @desc 获取主键
	 * @return id - 主键
	 */
	@Override
	public String getId() {
		return id;
	}

	/**
	* @desc 设置主键
	* @param id 主键
	*/
	public void setId(String id) {
		this.id = id;
	}

	/**
	 * @desc 获取创建者
	 * @return create_by - 创建者
	 */
	public String getCreateBy() {
		return createBy;
	}

	/**
	 * @desc 设置创建者
	 * @param createBy 创建者
	 */
	public void setCreateBy(String createBy) {
		this.createBy = createBy == null ? null : createBy.trim();
	}

	/**
	* @desc 获取创建时间
	* @return create_date - 创建时间
	*/
	@JSONField(format="yyyy-MM-dd HH:mm:ss")
	public Date getCreateDate() {
		return createDate;
	}

	/**
	* @desc 设置创建时间
	* @param createDate 创建时间
	*/
	public void setCreateDate(Date createDate) {
		this.createDate = createDate;
	}

	/**
	* @desc 获取更新者
	* @return update_by - 更新者
	*/
	public String getUpdateBy() {
		return updateBy;
	}

	/**
	* @desc 设置更新者
	* @param updateBy 更新者
	*/
	public void setUpdateBy(String updateBy) {
		this.updateBy = updateBy == null ? null : updateBy.trim();
	}

	/**
	* @desc 获取更新时间
	* @return update_date - 更新时间
	*/
	@JSONField(format="yyyy-MM-dd HH:mm:ss")
	public Date getUpdateDate() {
		return updateDate;
	}

	/**
	* @desc 设置更新时间
	* @param updateDate 更新时间
	*/
	public void setUpdateDate(Date updateDate) {
		this.updateDate = updateDate;
	}

	/**
	* @desc 获取备注信息
	* @return remarks - 备注信息
	*/
	@Length(min=0, max=255)
	public String getRemarks() {
		return remarks;
	}

	/**
	* @desc 设置备注信息
	* @param remarks 备注信息
	*/
	public void setRemarks(String remarks) {
		this.remarks = remarks == null ? null : remarks.trim();
	}

	/**
	* @desc 获取删除标记(0:正常;1:删除)
	* @return del_flag - 删除标记(0:正常;1:删除)
	*/
	@Length(min=1, max=1)
	public String getDelFlag() {
		return delFlag;
	}

	/**
	* @desc 设置删除标记(0:正常;1:删除)
	* @param delFlag 删除标记(0:正常;1:删除)
	*/
	public void setDelFlag(String delFlag) {
		this.delFlag = delFlag == null ? null : delFlag.trim();
	}

	/**
	 * @desc 插入之前执行方法，需要手动调用
	 */
	public void preInsert() {
		setId(IdGenUtils.randomLongStr());
		this.createDate = new Date();
	}

	/**
	 * @desc 更新之前执行方法，需要手动调用
	 */
	public void preUpdate(){
		this.updateDate = new Date();
	}
}